/**
 * 上方追加型のリアクティブリスト
 * 
 * @param i_elem
 * @param i_param
 * {
 * 		ares:アニメーション解像度
 * 		amin:ReactiveWindowのアニメーション敷居値
 * 		aint:アニメーションインターバル
 * 		emax:エレメントの最大数
 * }
 * @return
 */
function ReactiveListH(i_elem,i_param)
{
	var _apm=i_param;
	var _t_padiv;
	var _t=this;
	function initDiv(i_elem)
	{
		var s=i_elem.style;
		s.border="solid 1px black";
		s.overflow="auto";
		s.margin="0px";
		var e=document.createElement("div");
		e.style.height=i_elem.offsetHeight;
		i_elem.appendChild(e);
	}
	var max_elem=i_param.emax;
	this.addTag=function(v)
	{
		//必要に応じて削除
		if (i_elem.childNodes.length > max_elem){
			i_elem.removeChild(i_elem.childNodes[i_elem.childNodes.length-1]);
		}
		//上に追加して、カレント位置をずらす
		i_elem.insertBefore(v,i_elem.childNodes[0]);
		var h=v.offsetHeight;
		//top目的地を設定
		i_elem.scrollTop=v.offsetHeight;
		epos=0;
		cpos+=v.offsetHeight;
		if(time_id==null){
			time_id=setInterval(timerProc,_apm.aint);
		}
	}
	this.addItem=function(v)
	{
		var e=document.createElement("div");
		e.innerHTML=v;
		this.addTag(e);
	}
	//スクロール位置を合せる。
	var time_id,epos,cpos;
	cpos=0;
	this.killTimer=function()
	{
		if(time_id!=null){
			clearInterval(time_id);
			time_id=null;
		}
	}
	this.isStart=function(){time_id!=null;}
	function timerProc()
	{
		if(epos==cpos){
			//paddingDivのサイズを調整(省略)
			//タイマの停止をお伺い
			var iscont=true;
			if(_t.onEndAnimation!=null){
				iscont=_t.onEndAnimation();
			}
			if(!iscont){
				clearInterval(time_id);
				time_id=null;
			}
			return;
		}
		cpos=(epos+cpos*_apm.ares)/(_apm.ares+1);
		if(Math.abs(cpos-epos)<_apm.amin){
			cpos=epos;
		}
		i_elem.scrollTop=parseInt(cpos);
	}
	//アニメーションの終了を通知する関数
	this.onEndAnimation=null;
	initDiv(i_elem);
}		